<style>
h1 {color: #708090; text-align:center}
h2 {color: #4b0082; margin-top:1em}
p, li {margin: 0.5em 0}
</style>
&nbsp;

# Электронный журнальчик

## Общие сведения

Предлагаемый журнал является сильно редуцированной версией [электронного журнала «Шкала»](https://scole.ag61.ru) и предназначен для использования **одним учителем** в **одном классе**. Для его размещения может быть использован любой хостинг с поддержкой языка программирования PHP. Для хранения данных используется встроенная база данных SQLite; никакого другого программного обеспечения не требуется. Разработчиком журнала (как и оригинального электронного журнала «Шкала») является <nobr>[А. М. Гольдин](https://ag61.ru/).</nobr>

Журнал не является заменой «большим» электронным журналам с полным функционалом; он может использоваться как дополнение к ним, либо самостоятельно, для небольших групп обучающихся (например, для различных курсов, мини-школ, в работе репетиторов и пр.)

## Установка и первоначальная настройка

1. Скопируйте все файлы электронного журнала (кроме `_PWDGEN.html`, `LICENSE.txt` и `README.md`) в рабочую папку сервера. При начале работы с журналом автоматически создастся файл `reg.db` (в нём хранятся все введенные в ходе работы данные); не забывайте регулярно выполнять его резервное копирование.

1. Отредактируйте файл `config.js` (кодировка файла — **UTF-8**):
    - укажите инициалы и фамилию учителя (например, `"В. И. Пупкин"`);
    - отредактируйте перечень предметов, которые ведет данный учитель, с их идентификаторами (в качестве идентификатора используется одна буква латинского алфавита);
    - введите список обучающихся: **только полное имя и через один пробел — первая буква фамилии** (если в классе имеются обучающиеся, у которых имена и первые буквы фамилий совпадают, для них можно использовать две первые буквы фамилии). Если размещение (хостинг) электронного журнала производится с соблюдением всех требований закона о защите персональных данных, допускается список, наоборот, с фамилиями и первыми буквами имен; точки в конце этих первых букв не ставятся;
    - отредактируйте перечень учебных периодов, по итогам которых производится промежуточная аттестация, по имеющемуся в файле `config.js` образцу, указав даты окончания этих периодов (по умолчанию в файле указаны даты окончания первого полугодия 1 января, второго полугодия — 1 июля, учебного года — 2 июля). Если дата окончания учебного периода находится в первом полугодии учебного года (например, первой четверти — 5 ноября), в соответствующей строке замените `lastYear` на `(lastYear - 1)`. **Даты окончания учебных периодов не должны совпадать**;
    - отредактируйте переменную `START` — даты начала учебных периодов — в соответствии с имеющимся в файле `config.js` комментарием.

1. В файле `api.php` задайте пароль учителя для входа в электронный журнал (строка 3). В файлах `api.php` (строка 7) и `_PWDGEN.html` (строка 11) отредактируйте соль — произвольную достаточно длинную (одинаковую в обоих этих файлах) символьную строку, используемую для генерирования паролей обучающихся. Храните соль в строгом секрете!

1. Запустите электронный журнал, введя адрес хоста в браузере. Убедитесь, что в рабочей папке сервера создался файл `reg.db`. В случае, если этого не произошло, проверьте права записи на эту папку.

1. С помощью файла `_PWDGEN.html` сгенерируйте пароли обучающихся (шестизначные числа); для этого просто запустите этот файл локально браузером и сохраните текстовый файл с паролями. При необходимости генерирования пароля одного учащегося используйте ссылку вида `file://путь/_PWDGEN.html?Василий_П`. Раздайте пароли как обучающимся, так и их родителям.

1. Пароли обучающихся нигде не хранятся и генерируются из имён обучающихся с использованием соли. Для смены пароля обучающегося (например, в случае компрометации пароля) просто измените имя обучающегося в файле `config.js` (например, вместо `"Анна Б"` напишите `"Анна Бо"`) и заново сгенерируйте пароль. Для смены пароля учителя отредактируйте строку 3 файла `api.php`.

## Работа в роли учащегося (родителя)

Для входа в журнал учащийся (родитель) использует имя учащегося с первой буквой фамилии (как указано в файле `config.js`, например, `"Анна Б"`) и пароль учащегося. После входа в верхней части экрана ему предлагается выбрать один из предметов; после выбора предмета отображаются две таблицы:

- с темами уроков, отметками и процентом выполнения самостоятельной работы в тетради (каждая отметка имеет свой вес; если вес не указан, значит, он равен 1);
- со статистическими данными по учебным периодам (средневзвешенный балл, количество пропущенных уроков и количество опозданий на уроки).

Для выхода из журнала (разлогинивания) достаточно перезагрузить страницу в браузере. Введенный пользователем пароль хранится только в оперативной памяти компьютера; файлы cookie или аналогичные средства не используются.

## Работа в роли учителя

Для входа в журнал учитель использует произвольный логин, не содержащий пробелов (например, `"abc"`) и свой пароль. После входа отображаются четыре блока:

- верхний блок для выбора предмета;
- левый блок — таблица с датами уроков, весами отметок, списком обучающихся и собственно отметками;
- правый верхний блок для ввода новой темы и других данных нового урока;
- правый нижний блок со списком всех проведенных уроков.

**Для ввода нового урока** необходимо выбрать его дату, тему урока, домашнее задание (не обязательно), количество проведенных часов (одной дате может соотвествовать только одна запись в журнале, но при этом количество часов может быть указано от 1 до 6) и вес отметок. После ввода (выбора) этих данных нужно нажать кнопку ввода `">>"`.

**Для редактирования темы и других данных урока** нужно кликнуть мышью на дате урока (показывается оранжевым цветом) в блоке отображения всех уроков, при этом данные урока появятся в правом верхнем блоке. После редактирования этих данных вновь нажмите кнопку ввода `">>"`.

**Для удаления урока** кликните на его дате как указано выше, после чего очистите тему урока и нажмите на кнопку ввода `">>"`. Будьте внимательны, при удалении урока удалится также и колонка в левой таблице с отметками (все отметки будут удалены из базы данных).

После ввода урока в левой таблице с отметками создается новая колонка, соответствующая введенному уроку. Для гозонтальной прокрутки левой таблицы можно использовать колесико мыши, держа зажатой клавишу Shift.

**Для ввода отметки** кликните мышью на соответствующей клетке в левой таблице. В одну клетку журнала можно внести только следующие символы: цифры (отметки), буквы **н** (отсутствие на уроке), **о** (опоздание на урок), знаки **+** (самостоятельная работа в тетради выполнена на 100%) и **=** (тетрадь на проверку не сдана). Кроме того, можно указывать процент выполнения самостоятельной работы в тетради в виде числа (от 0 до 99; число 100 тоже допустимо, но его удобнее указывать знаком **+**). При этом важны четыре правила:

1. Несколько отметок разделяются одним пробелом. Таким образом, `3 4` будет истолковано как две отметки, 3 и 4, в то время как `34` будет истолковано как одна отметка 34.

1. Если учитель вводит и процент выполнения самостоятельной работы в тетради, и отметку, то они должны разделяться знаком **-** (дефис); отметка в этом случае обязательна. Сначала пишется процент выполнения самостоятельной работы, затем (без пробела) дефис, а затем (без пробела) одна отметка или несколько отметок, разделенных пробелами. Проценты выполнения самостоятельной работы в тетради показываются обучающимся (родителям).

1. Если используются знаки **+** (100% выполнения самостоятельной работы в тетради) или **=** (тетрадь не сдана), дефис в качестве разделителя не используется.

1. Буквы **н** (отсутствие на уроке) и **о** (опоздание на урок) могут стоять как в начале строки, записываемой в клетку журнала, так и в конце; пробелами от остальных символов и друг от друга они не отделяются. При необходимости можно использовать символы **нн** (учащийся не был на сдвоенном уроке) или **оо** (опоздание на каждый из двух уроков).

Примеры корректных записей в клетках журнала:

```
4
4 5
нн
95-3
о95-3 4
н+3
=4 5
н4 3
5 3о
```
Введенная в клетку журнала строка автоматически записывается в базу данных при выполнении одного из трех действий:

- потере фокуса клеткой журнала (например, кликании мышью на другой клетке или на свободном месте страницы);
- нажатии клавиши Enter;
- нажатии клавиши ↓ (стрелка вниз).

В последних двух случаях фокус перемещается на нижележащую клетку таблицы с отметками.

**Для редактирования (в том числе удаления) отметки** кликните на соответствующей клетке журнала, отредактируйте (или удалите) запись в этой клетке, после чего запишите изменения в базу одним из трех способов, указанных выше.

**Для просмотра статистики одного учащегося** (средневзвешенного балла, количества пропущенных уроков, количества опозданий) по учебным периодам и в целом за учебный год кликните мышью на имени учащегося в левом столбце таблицы с отметками.

Средневзвешенный балл вычисляется по формуле <nobr><i>b</i> = <big>(Σ</big><i>b<sub>i</sub> · w<sub>i</sub></i><big>)</big>/<big>Σ</big><i>w<sub>i</sub></i></nobr> где <i>b<sub>i</sub></i> — отметки, <i>w<sub>i</sub></i> — их веса.

**Для удаления всех отметок из журнала** просто удалите (или переместите в архив) файл `reg.db`.

**Для просмотра отметок из архива** замените текущий файл `reg.db` архивным. Имейте при этом в виду, что в файле `config.js` нужно будет в объекте DOP (даты окончания учебных периодов) вместо выражений типа `[lastYear+"-01-01"]` написать просто даты, соответствующие просматриваемому учебному году, например, `"2025-01-01"` (без квадратных скобок).

